package br.com.prime.model.bussines;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.prime.model.ConnectionFactory;
import br.com.prime.model.pojo.Usuario;

public class UsuarioDAO {

	private Connection connection;

	public UsuarioDAO(){
		try {
			this.connection = new ConnectionFactory().getConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void salvar(Usuario usuario) {
		String sql = "INSERT INTO USUARIO(ID, NOME, LOGIN, SENHA) VALUES (NULL,?,?,?);";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1, usuario.getNome());
			stmt.setString(2, usuario.getLogin());
			stmt.setString(3, usuario.getSenha());
			stmt.execute();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public List<Usuario> getAll() {
		List<Usuario> usuarios = new ArrayList<Usuario>();
		String sql = "SELECT * FROM USUARIO ORDER BY NOME";
		try {
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			ResultSet rs = stmt.executeQuery();
			usuarios = montarObjeto(rs);
			rs.close();
			stmt.close();
			return usuarios;
		} catch (SQLException e) {
			e.printStackTrace();
			return usuarios;
		}
	}

	public void alterar(Usuario usuario) {
		String sql = "UPDATE USUARIO SET NOME = ?, LOGIN = ?, SENHA = ? WHERE ID = ?";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setInt(4, usuario.getId());
			stmt.setString(1, usuario.getNome());
			stmt.setString(2, usuario.getLogin());
			stmt.setString(3, usuario.getSenha());
			stmt.execute();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void deletar(Usuario usuario) {
		String sql = "DELETE FROM USUARIO WHERE ID = ?";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setLong(1, usuario.getId());
			stmt.execute();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}	
	
	public List<Usuario> montarObjeto(ResultSet rs){
		List<Usuario> usuarios = new ArrayList<Usuario>();
		try {			
			while (rs.next()) {
				Usuario usuario = new Usuario();
				usuario.setId(rs.getInt("id"));
				usuario.setNome(rs.getString("NOME"));
				usuario.setSenha(rs.getString("SENHA"));
				usuario.setLogin(rs.getString("LOGIN"));
				usuarios.add(usuario);
			}	
			return usuarios;
		} catch (Exception e) {
			e.printStackTrace();
			return usuarios;
		}		
	}
}